import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)//当Vue启动时，就会加载Vuex，从而实现Vue项目的全局状态管理

export default new Vuex.Store({
  state: {
    //维护一个变量，表示当前登录状态
    islogin:sessionStorage.getItem('user')?1:0, //0-未登录
    //存储当前登录用户信息
    user:sessionStorage.getItem('user')?JSON.parse(sessionStorage.getItem('user')):{},



    username:'dingding',
    sex:'男',
    married:true,
    school:{name:'北京大学',loc:"北京"},
    hobby:['健身','游泳'],

     // 保存购物车中所有的购物项数据
     cartitems : [
      {
        id: 1,
        name: '小米11',
        price: 4999.0,
        count: 2
      },
      {
        id: 2,
        name: '华为P40',
        price: 5999.0,
        count: 3
      },
      {
        id: 3,
        name: 'Apple 14',
        price: 8999.0,
        count: 1
      }
    ]

  },
  mutations: {
    //修改登录状态
    //payload是当前
    loginOK(state,payload){
      state.islogin=1
      state.user=payload
    },

    // 提供方法修改购物车数量++
    //接收id，从而使相应购物项的数量++
    plus(state,payload){
      for(let i=0;i<state.cartitems.length;i++){
        let item=state.cartitems[i];
        if(item.id==payload){
          item.count++
        }
      }
    },
    minus(state,payload){
      for(var i=0;i<state.cartitems.length;i++){
        let item=state.cartitems[i];
        if(item.id==payload && item.count>1){
          item.count--;
        }
      }
    },

    // 修改已婚状态
    //声明修改state的方法
    updateMarriedState(state,payload){
      //payload意为载荷 接收传递来的参数
      console.log(payload)
      if(payload){
        state.married=payload;
        return;
      }
      //如果没有传递payload，那么切换married属性
      if(state.married){
        state.married=false
      }else{
        state.married=true
      }
    },
    delItem(state,payload){
      for(let i=0;i<state.cartitems.length;i++){
        let item=state.cartitems[i];
        if(item.id==payload){
          state.cartitems.splice(i,1)
        }
      }
    }
  },
  //在合适的时机，
  actions: {
    //声明del方法，异步删除相应购物项
    // context:上下文，就是store对象，store对象内部有state，mutations等
    del(context,payload){
      window.setTimeout(()=>{
        //执行删除  payload就是传递过来的待删除购物项的id
        context.commit('delItem',payload)
      },2000)
    }
    
  },
  getters:{
    total(state,gettrts){
      let price=0;
      state.cartitems.forEach((item)=>{
        price+=item.price*item.count
      });
      return price
    }
  },
  modules: {
  }
})
